home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / msoftapp.zip / HELLO.CPP < prev    next >
C/C++ Source or Header  |  1993-06-01  |  4KB  |  134 lines

  1. // hello.cpp : Defines the class behaviors for the Hello child window.
  2.  
  3. #include"viewer.h"
  4.  
  5. BEGIN_MESSAGE_MAP(CHelloWin, CMDIChildWnd)
  6.     ON_WM_CREATE()
  7.     ON_COMMAND(IDM_BLACK, OnColor)
  8.     ON_COMMAND(IDM_RED, OnColor)
  9.     ON_COMMAND(IDM_GREEN, OnColor)
  10.     ON_COMMAND(IDM_BLUE, OnColor)
  11.     ON_COMMAND(IDM_WHITE, OnColor)
  12.     ON_COMMAND(IDM_CUSTOM, OnColor)
  13.     ON_WM_PAINT()
  14.     ON_WM_MDIACTIVATE()
  15.     ON_WM_DESTROY()
  16. END_MESSAGE_MAP()
  17.  
  18. // Create: Register a custom WndClass and create a window.
  19. // This must be done because CHelloWin has a custom icon.
  20. BOOL CHelloWin::Create(LPCSTR szTitle, DWORD style,const RECT& rect,
  21.     CMDIFrameWnd* parent)
  22.     {
  23.     const char* pszHelloClass = 
  24.           AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
  25.             LoadCursor(NULL, IDC_ARROW), 
  26.             (HBRUSH)(COLOR_WINDOW+1),
  27.             LoadIcon(AfxGetInstanceHandle(), "hello"));
  28.  
  29.     return CMDIChildWnd::Create(pszHelloClass, szTitle, style, rect, parent);
  30.     }
  31.  
  32. // Constructor: Do minimum initialization
  33. CHelloWin::CHelloWin()
  34.     {
  35.     m_ColorID = 0;
  36.     m_TextColor = 0L;
  37.     m_pMenuCurrent = NULL;
  38.     m_bWindowActive = FALSE;
  39.     }
  40.  
  41. // Destructor: Clean up menu iff Windows won't
  42. CHelloWin::~CHelloWin()
  43.     { 
  44.     if(m_bWindowActive)
  45.         {
  46.         // Suppress Foundation DestroyMenu done in CMenu destructor 
  47.         //(Windows takes care of menu cleanup for the active window)
  48.         //
  49.         m_pMenuCurrent->Detach();
  50.         }
  51.     }
  52.  
  53. // OnCreate:
  54. // Set up colors -- this also could have been done in constructor
  55. int CHelloWin::OnCreate(LPCREATESTRUCT /* p */)
  56.     {
  57.     m_ColorID = IDM_BLACK;
  58.     m_TextColor = clrTextArray[0];
  59.     return 0;
  60.     }
  61.  
  62. // OnDestroy:
  63. // Notify app main MDI frame window of destruction so it may
  64. // do some cleanup.  
  65. void CHelloWin::OnDestroy()
  66.     {
  67.     GetMDIFrame()->SendMessage(WM_CHILDDESTROY,(UINT)m_hWnd, 0);
  68.     }
  69.  
  70. // OnColor: Change menu checkmarks to indicate the newly selected color.
  71. void CHelloWin::OnColor()
  72.     {
  73.     CMenu* pMenu = GetMDIFrame()->GetMenu();
  74.     pMenu->CheckMenuItem(m_ColorID, MF_UNCHECKED);
  75.  
  76.     m_ColorID = GetCurrentMessage()->wParam;
  77.     pMenu->CheckMenuItem(m_ColorID, MF_CHECKED);
  78.  
  79.     if(m_ColorID != IDM_CUSTOM)
  80.         m_TextColor = clrTextArray[m_ColorID - IDM_BLACK];
  81.     else
  82.         {
  83.         CColorDialog dlgColor(m_TextColor);
  84.         if(dlgColor.DoModal() == IDOK)
  85.             m_TextColor = dlgColor.GetColor();
  86.         }
  87.         // Force the client area text to be repainted in the new color
  88.     Invalidate();
  89.     }
  90.  
  91. // OnPaint: Draw a string in the center of the client area.
  92. void CHelloWin::OnPaint()
  93.     {
  94.     CPaintDC dc(this);
  95.  
  96.     dc.SetTextColor(m_TextColor);
  97.     dc.SetBkColor(::GetSysColor(COLOR_WINDOW));
  98.     CRect rect;
  99.     GetClientRect(rect);
  100.     dc.DrawText("Hello, World!", -1, rect, 
  101.         DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  102.     }
  103.  
  104. // OnMDIActivate: window is being activated or deactivated.  
  105. // Switch the menus appropriately.
  106. void CHelloWin::OnMDIActivate(BOOL bActivate, CWnd*, CWnd*)
  107.     {
  108.     CMDIFrameWnd* pFrame = GetMDIFrame();
  109.     CMenu* pWinPopupMenu = NULL;
  110.     CMenu* pMenu = new CMenu;
  111.  
  112.     m_bWindowActive = bActivate;
  113.  
  114.     if(bActivate)
  115.         {
  116.         pMenu->LoadMenu("Hello");
  117.         pWinPopupMenu = pMenu->GetSubMenu(HELLO_MENU_POS);
  118.         CMenu* pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
  119.         pLastMenu->DestroyMenu();
  120.  
  121.         pMenu->CheckMenuItem(m_ColorID, MF_CHECKED);
  122.         }
  123.     else    
  124.         {
  125.         pMenu->LoadMenu("Init");
  126.         pWinPopupMenu = pMenu->GetSubMenu(INIT_MENU_POS);
  127.         CMenu* pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
  128.         pLastMenu->DestroyMenu();
  129.         }
  130.     delete m_pMenuCurrent;
  131.     m_pMenuCurrent = pMenu;
  132.     pFrame->DrawMenuBar();
  133.     }
  134.